package java.socket_2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class Server_2 {
  private   ServerSocket serverSocket;
  public Server_2(){
      try {
          System.out.println("服务器正在启动");
          //建立一个服务器套接字开放端口xxxx
          serverSocket =new ServerSocket(8088);
          System.out.println("服务器启动完毕");
      } catch (IOException e) {
          throw new RuntimeException(e);
      }

  }
  public void start(){
      while (true){//创建一个循环无线接电话
          try {
              System.out.println("等待客户端链接");
              //服务器接起电话
              Socket socket=serverSocket.accept();
              //创建一个线程任务
              ClientHandler handler=new ClientHandler(socket);//此处需要传入一个值，需修改原构造方法
              //创建线程来负责上面的内容
              Thread t=new Thread(handler);
              //启动线程
              t.start();
          } catch (IOException e) {
              throw new RuntimeException(e);
          }
      }
  }

    public static void main(String[] args) {
        //创建一个服务器对象
        Server_2 server_2=new Server_2();
        //启动服务器
        server_2.start();
    }
    /*

     */
    private class ClientHandler implements Runnable{
      private Socket socket;//创建一个与外部相等的插座用于方法外
        private String host;//创建一个host用于存储客户端的地址信息



     public ClientHandler(Socket socket){
          this.socket=socket;//把外部信息接手过来
         host=socket.getInetAddress().getHostAddress();//通过socket获取客户端地址

      }

        @Override
        public void run() {
            try {
                //接入低级输入流
                InputStream is =socket.getInputStream();
                //接入输入流读写器并规定编码UTF-8
                InputStreamReader isr=new InputStreamReader(is);
                //接入缓冲输入流
                BufferedReader br=new BufferedReader(isr);
                String line;//创建字符串用于保存读到的数据
                while ((line=br.readLine())!=null){//判断是否读到末尾
                    System.out.println(host+"说"+line);//在控制台输出ip地址已经客户端输入的内容

                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }


        }
    }
}
